Skip to content

Work#1

Open
eggetteLuo wants to merge 14 commits intomainfrom
work
Open

Work#1
eggetteLuo wants to merge 14 commits intomainfrom
work

Conversation

@eggetteLuo
Copy link
Owner

No description provided.

xiaoluo and others added 14 commits December 31, 2025 13:09
- 添加登录页面, 要求输入用户名进行访问
- 实现基于 Jetpack Navigation Compose 的页面路由, 连接登录页和文件浏览页
- 将文件浏览功能重构为独立的 `ExplorerScreen` 和 `ExplorerViewModel`
- `ExplorerViewModel` 根据登录的 userId 初始化不同的文件根目录, 实现用户空间隔离
- 引入 `navigation-compose` 依赖库
- 实现文件管理器基本功能
- 添加文件和文件夹列表显示
- 实现目录导航和返回上一级功能
- 增加文件访问权限请求逻辑
- 引入相关依赖库 (ViewModel, PermissionX, Material Icons)
- 新增应用启动时的权限检查和请求逻辑,未授权则显示权限引导页
- 创建 `PermissionScreen` 作为专门的权限请求引导 UI 界面
- 将 `requestStoragePermission` 逻辑抽离到独立的 `util/Permission.kt` 文件中
- 在 `NavGraph` 中根据授权状态决定起始页面是权限页还是登录页
- 为 `ExplorerScreen` 添加 `TopAppBar`,显示当前路径和用户 ID
- 在 `TopAppBar` 上实现返回上一级的功能(非根目录时显示返回按钮)
- 添加刷新、排序等操作的下拉菜单入口
- 将 `FileExplorerScreen` 和 `FileRow` 相关的 Composable 函数从 `MainActivity` 中移除
- 在 `MainActivity` 中设置 `Scaffold` 作为应用根布局,并集成 `AppNavGraph` 来处理页面导航
- 将 `Scaffold` 的 `PaddingValues` 从 `MainActivity` 传递到 `ExplorerScreen`。
- 在 `ExplorerScreen` 中,将 `TopAppBar` 的 `windowInsets` 设置为默认值,避免与系统 UI 重叠。
- 为 `LazyColumn` 设置底部 `padding`,以确保列表底部内容不会被系统导航栏遮挡。
- 将 `LazyColumn` 的 `contentPadding` 从使用错误的 `paddingValues` 修正为 `contentPadding`
- 移除旧的 `FileViewModel`,统一使用 `ExplorerViewModel`
- `ExplorerViewModel` 文件加载移至 IO 线程,避免阻塞主线程
- 增强 `FileItem` 模型,增加创建时间、权限、后缀名等属性
- 在 Android O 以上版本中,尝试读取文件的真实创建时间
- 简化并清理 `MainActivity` 和 `NavGraph`,移除不再需要的 `PaddingValues` 传递

feat: 增强文件列表 UI 表现力

- 重新设计 `FileRow`,展示更丰富的文件信息(图标、名称、日期、大小或项数)
- 新增 `util/Format.kt`,提供文件日期、大小和文件夹项数格式化的工具函数
- 实现 `getFileTheme` 函数,根据文件后缀名为不同类型文件匹配专属的彩色图标
- 扩大了文件类型的图标覆盖范围(如:代码、压缩包、APK、电子书等)
- 在文件浏览页增加空状态 UI
- 当文件夹内容为空时,居中显示 "文件夹为空" 的提示文本
- 为文件列表项 `FileRow` 添加长按事件, 用于选中文件
- 文件被长按选中后, 底部会弹出 `BottomAppBar` 操作栏, 同时隐藏新建文件夹的 `FloatingActionButton`
- 在底部工具栏中添加删除、详情、移动、复制、重命名和取消等操作的占位图标按钮
- 将 `FileRow` 的 `clickable` 修改为 `combinedClickable`, 以同时支持单击和长按
- 新增 `ActionIconButton` 可复用组件, 用于构建底部工具栏中的带标签的图标按钮
- **文件排序**:
    - 新增按名称、创建时间 (正序/倒序) 对文件列表进行排序的功能。
    - 在 `ExplorerViewModel` 中添加 `SortOrder` 枚举和 `updateSortOrder` 方法来管理和切换排序逻辑。
    - 在 `ExplorerScreen` 的顶部菜单中添加入口,允许用户选择不同的排序方式。

- **文件操作**:
    - 实现文件的删除、重命名、复制和剪切功能。
    - 在 `ExplorerViewModel` 中添加 `deleteItem`, `renameItem`, `setClipboard`, `paste` 等方法来处理核心逻辑。
    - `ExplorerScreen` 中,当用户长按文件时,底部会弹出操作栏,包含删除、剪切、复制、重命名等按钮。
    - 为“重命名”操作添加了专用的 `AlertDialog` 对话框。

- **文件详情**:
    - 新增“文件详情”功能,通过 `ModalBottomSheet` 展示选中文件的详细信息,如路径、大小、创建/修改时间等。
    - 创建了独立的 `FileDetailsSheet` Composable 组件来承载详情 UI。

- **UI 和依赖**:
    - 在底部操作栏中,使用 `ContentCut` 图标替换了旧的移动图标。
    - 在顶部菜单中添加了“粘贴”选项,该选项在剪贴板有内容时才可用。
    - 引入 `androidx.compose.material3:material3` 依赖以支持 `ModalBottomSheet` 组件。
- 新增从系统相册选择图片并保存到当前目录的功能
- 在 `ExplorerViewModel` 中添加 `saveImageToCurrentDir` 方法, 用于处理图片保存逻辑
- 在 `ExplorerScreen` 的 `TopAppBar` 下拉菜单中添加入口,并使用 `rememberLauncherForActivityResult` 调用图片选择器
- 优化 `TopAppBar` 下拉菜单,为刷新、排序、粘贴等操作添加了带颜色区分的 `leadingIcon`
- 调整了下拉菜单中部分选项的文案,使其更直观 (如: “按时间排序” -> “时间排序 (新→旧)”)
- 在登录页增加密码输入框和可见性切换功能
- `LoginViewModel` 引入 `SharedPreferences` 实现用户密码的保存与验证
- 实现首次输入即注册、后续输入则验证密码的登录逻辑
- 在文件浏览页 `TopAppBar` 的菜单中添加“退出登录”选项
- 实现退出登录后导航回登录页面的功能
- **代码重构**:
    - 抽离 `FileHelper` 单例工具类,将所有物理文件操作(如读写、删除、复制、移动)与 ViewModel 解耦.
    - 在 `ExplorerViewModel` 中引入 `FileHelper`,简化 ViewModel 职责,使其更专注于状态管理和业务流转.
    - 重构 `ExplorerViewModel` 内部逻辑,增加错误处理机制,通过 `SharedFlow` 向 UI 层发送 Snackbar 错误提示.

- **UI/UX 增强**:
    - **文件列表**:
        - 长按文件进入“选中模式”,底部滑入带动画效果的操作栏,并为选中项提供高亮背景和勾选图标.
        - 为不同文件类型(如图片、视频、音频、文档、代码等)配置了多样化的彩色图标,增强辨识度.
        - 优化列表为空时的显示效果,添加了“文件夹为空”的占位视图.
        - 列表滚动时,顶部 `TopAppBar` 增加滚动颜色和阴影变化的交互效果.
    - **顶部栏**:
        - 优化标题显示,在根目录时副标题显示当前用户名.
        - 当剪贴板有内容时,在顶部栏右侧显示“粘贴”快捷图标.
    - **对话框**:
        - 将新建和重命名对话框重构为独立的 `@Composable` 组件,提升代码复用性.
    - **动画与依赖**:
        - 为底部操作栏的出现/消失添加了平滑的动画效果 (`AnimatedVisibility`).
        - 为 `LazyColumn` 添加了 `key` 和 `animateItem` 增强列表渲染性能与动画表现.
        - 添加了 `androidx.compose.foundation` 依赖.
- 将应用版本号从 `1.0` 更新为 `1.0.0`
- 对 `LoginViewModel` 和 `LoginScreen` 的代码进行了格式化和重构,以提高可读性
- 在 `LoginViewModel` 中为 `SharedPreferences` 的使用添加了注释说明
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant